package com.servicecloud.consumer.config;

import java.nio.charset.Charset;
import java.util.Base64;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.web.client.RestTemplate;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RetryRule;

@Configuration
public class ConfigBean {

	@Bean
	// @LoadBalanced
	public RestTemplate getRestTemplate() {
		return new RestTemplate();
	}

	@Bean
	public IRule myRule() {
		// return new RandomRule();// 采用随机算法进行负载均衡，默认是采用轮询的方式
		return new RetryRule();// 采用轮询算法，如果服务连续多次无法访问就会跳过该服务的调用
	}

	/**
	 * 作用：</br>
	 * 针对SpringSecurity进行的安全认证配置（他的认证是基于头信息进行认证处理的）
	 * 
	 * @Author Gavin</br>
	 * @return</br>
	 * 				2019年8月12日
	 */
	@Bean
	public HttpHeaders getHeaders() {
		HttpHeaders headers = new HttpHeaders();
		String auth = "springcloud:hello";// springsecurity设置的账号密码
		byte[] encodeAuth = Base64.getEncoder().encode(auth.getBytes(Charset.forName("US-ASCII")));// 需要进行Base64加密
		String authHeader = "Basic " + new String(encodeAuth);// 需要注意Basic后面有一个空格
		headers.set("Authorization", authHeader);
		return headers;
	}
}